package yl.hs.bmipfull.service.system;

import yl.hs.bmipfull.pojo.system.DictItemEntity;
import yl.hs.bmipfull.pojo.system.DictTypeEntity;
import yl.hs.bmipfull.service.IBaseService;
import yl.hs.bmipfull.viewmodels.PageQuery;
import yl.hs.bmipfull.viewmodels.SubmitModel;

import java.util.List;
import java.util.Map;

/**
 * IDictTypeService 数据字典类型信息服务接口
 *
 * @author 谢景广
 * @category 系统管理-数据字典类型信息服务
 * @date 2021-05-10
 */
public interface IDataDictService extends IBaseService {

    /**
     * 查询数据字典类型信息
     *
     * @param pageQuery 查询条件 {@link PageQuery}
     * @return 数据字典类型-List<{@link DictTypeEntity}>
     * @throws Exception 查询参数异常
     */
    List<DictTypeEntity> queryList(PageQuery pageQuery) throws Exception;

    /**
     * 查询所有字典类型
     *
     * @return
     */
    List<DictTypeEntity> queryDataTypeAll();

    /**
     * 根据字典类型获取字典类型信息
     *
     * @param typeSN
     * @return
     */
    DictTypeEntity findDictTypeBySn(String typeSN);

    /***
     * 判断字典类型代码是否存在
     * @param typeCode 字典类型代码
     * @param typeSN 数据字典类型编号
     * @return
     */
    Boolean checkTypeCodeExists(String typeCode, String typeSN);

    /**
     * 判断指定类型的数据项是否存在相同的值
     *
     * @param typeSN 数据字典类型编号
     * @param value  数据项代码
     * @param itemSN 数据项原始编号
     * @return
     */
    Boolean checkItemValueExists(String typeSN, String value, String itemSN);

    /**
     * 保存数据类型编辑或者新建的信息
     *
     * @param model 数据类型表单信息
     * @return
     */
    Integer saveDataType(SubmitModel model) throws Exception;

    /**
     * 根据数据字典项编号删除数据字典项
     *
     * @param snArray 数据字典项编号数组
     * @return
     */
    Integer deleteDataItem(String[] snArray);

    /**
     * 保存数据字典项编辑或者新建信息
     *
     * @param model 数据字典项表单信息
     * @return
     */
    Integer saveDataItem(SubmitModel model) throws Exception;

    /**
     * 根据数据字典类型编号删除数据字典类型
     *
     * @param snArray 数据字典类型编号
     * @return
     */
    Integer deleteDataType(String[] snArray);

    /**
     * 根据数据字典项编号获取数据字典项信息
     *
     * @param sn 数据字典项编号
     * @return
     */
    DictItemEntity findDataItemBySN(String sn);

    /**
     * 根据数据字典类型代码获取数据项信息
     *
     * @param typeCode 数据字典类型代码
     * @return
     */
    List<DictItemEntity> findDictItemByCode(String typeCode);

    /**
     * 根据数据字典类型编号获取数据项信息
     *
     * @param typeSN 数据字典类型编号
     * @return
     */
    List<DictItemEntity> findDictItemByTypeSN(String typeSN);

    /**
     * 获取所有数据字典项并组装成Map
     *
     * @return
     */
    Map<String, Object> queryObjDataAll();
}
